package com.bird.设计模式.创建型.单例模式.饿汉单例;

import java.io.*;

/**
 * @data 2022/2/25 15:53
 * @author: bird
 * @description: 序列化-破坏单例对象
 */
public class Test1 {

    // 序列化 破环单例模式
    public static void main(String[] args) throws IOException, ClassNotFoundException {

        // 将对象写出到文件中
        HungrySingleton instance = HungrySingleton.getInstance();
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("singleton_file"));
        oos.writeObject(instance);

        // 从文件中读取对象
        File file = new File("singleton_file");
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
        HungrySingleton newInstance = (HungrySingleton) ois.readObject();
        System.out.println(instance);
        System.out.println(newInstance);
        System.out.println(instance == newInstance);

        //结论: 对象的序列化可以破环单例模式
    }
}
/*
 * 结论: 序列化可以破环单例模式
 *  原因是：通过反射 创建出来一个新的实例
 *  在从流中读取文件 通过反射获取了新的对象。这样就破坏了单例对象
 * 当业务场景中出现 对象序列化和反序列化的时候 那么一定要考虑 序列化对单例模式的破坏。
 *
 *
 * */